github cdn服务

GitHub CDN服务

方式一: github仓库

github提供raw的方式访问源文件。(git gist 都适用)

github的文件地址

https://github.com/xu-song/async-rl/blob/master/resources/episode_reward.png  # blob

文件绝对地址

https://github.com/xu-song/async-rl/raw/master/resources/episode_reward.png  # raw
https://raw.githubusercontent.com/xu-song/async-rl/master/resources/episode_reward.png # raw的url经过 浏览器重定向后的路径 (被包了一层html标签)
https://raw.githubusercontent.com/xu-song/async-rl/master/resources/episode_reward.png?sanitize=true # 浏览器重定向后的路径 (真正的文件绝对路径,可用于<img src=""> 标签引用)
https://user-images.githubusercontent.com/  # issue和comment中上传的图片
https://rawgit.com/  # 贴你github上的文件地址,就能自动变成CDN地址(而且是SSL的)

方式二: issue和comment里上传的图片存在这

- https://user-images.githubusercontent.com   
- 文件上传的格式有限制

方式三:github release

  1. github release 这里适宜放大文件,比如模型文件,数据文件

其他

知乎: 关于连接返回的content-type
github提供的raw链接返回的content-type都是text/plain,浏览器会拒绝执行这样的js和css的。
可以用RawGit 这个网站来绕开text/plain的限制
购买github的cdn服务也是可以的

TODO: 检查一下content-type,分别对js,css,py,jpg测试。即用github分别host图片,js,py试试

知乎:关于浏览器解析content-type
浏览器在解析资源文件的时候会判断content-type头,这个http头定义了设备如何处理将要加载的资源,比如text/html就是让浏览器加在解析html,其中text/plain是纯文本,浏览器设备不会做任何处理,而只有application/javascript或者application/x-javascript(JavaScript 脚本)text/css(CSS样式表)这样表明是资源文件的浏览器设备才会做相应处理加在

TODO:测试一下呗

repo的raw_data VS

  • 每次有人请求raw_data,github 都要去访问这个 repo,查找要求的数据——比起普通的静态文件和 gist,这些操作的系统开销显然要大很多。 (gist也是repo啊,跟raw无关吗?)
  • 源码仓毕竟不同于文件服务器,请求一次的代价很大
  • github 的策略中,当对 raw data 的请求过于频繁时会返回 403 错误。
  • 比如。

总结以下”12306订票助手拖垮github事件”

根本归结于插件的自动更新机制

  • 和谐期:版本自动更新,新版插件托管在任何http服务器均可 (请求压力不大)
  • 跪了:某个版本,Chrome引入安全机制:对于一个HTTPS网站,其所有引用的资源(Script和StyleSheet之类的),也必须位于HTTPS的服务器上,否则拒绝执行。自动更新跪了
  • 问题来了:哪里找HTTPS服务器?
  • Aha!:github不错,还免费
  • 又跪了:GitHub对于第三方引用的资源,正常返回的概率是很低的。就算很少人用的时候,也几乎是每请求5-6次才肯返回一次正确的内容,其它的时候,全部返回403错误。自动更新又跪了
  • Aha!:如果一次数据请求失败,那么就每五秒请求一次,直到成功。
  • 报警了:16号。于是乎,每个用户都变成了每 5s 攻击一次的“肉鸡”。被github警告了

这就是该事件,下文继续

  • ss

好处

  • 突破浏览器并发限制
  • 动静分离、提高效率
  • CDN缓存更方便

问题

  • 只存了一份吗?怎样保证数据备灾 & 不同地域的访问速度
    -